package framework.automaton;

import framework.grid.Grid;
import framework.grid.Location;

/**
 * This interface defines the methods that should be implemented by a given
 * plugin in order for the program to run. It specifies the cellular
 * automaton to be run, or in other words, the behavior of the automaton.
 *
 * @author Bill Ge, May Zhai, Alex Yoo
 */
public interface Logic {
	
	/**
	 * Given the cell specified by the Location in the Grid, calculate and
	 * return what the state should be in the next turn.
	 * @param grid 
	 * @param loc location of the State to be calculated
	 * @return new State for the given location
	 */
	public State advanceTurn(Grid grid, Location loc);
}
